package com.yxy.chatserver.handler;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * WebSocket连接管理器
 * 负责管理所有的WebSocket连接，并提供消息转发功能
 */
@Component
public class WebSocketManager {
    
    /**
     * 存储用户ID和WebSocketSession的映射关系
     * 使用ConcurrentHashMap保证线程安全
     */
    private static final Map<String, WebSocketSession> USER_SESSION_MAP = new ConcurrentHashMap<>();
    
    /**
     * 添加用户连接
     * @param userId 用户ID
     * @param session WebSocket会话
     */
    public void addUserSession(String userId, WebSocketSession session) {
        USER_SESSION_MAP.put(userId, session);
    }
    
    /**
     * 移除用户连接
     * @param userId 用户ID
     */
    public void removeUserSession(String userId) {
        USER_SESSION_MAP.remove(userId);
    }
    
    /**
     * 根据用户ID获取WebSocket会话
     * @param userId 用户ID
     * @return WebSocket会话，如果不存在返回null
     */
    public WebSocketSession getSessionByUserId(String userId) {
        return USER_SESSION_MAP.get(userId);
    }
    
    /**
     * 获取当前连接数
     * @return 当前连接数
     */
    public int getConnectionCount() {
        return USER_SESSION_MAP.size();
    }
    
    /**
     * 判断用户是否在线
     * @param userId 用户ID
     * @return true表示在线，false表示离线
     */
    public boolean isUserOnline(String userId) {
        return USER_SESSION_MAP.containsKey(userId);
    }
}